package br.com.drestranho.escola.managed;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.com.drestranho.escola.dao.DisciplinaNomeDAO;
import br.com.drestranho.escola.entity.DisciplinaNome;

@ManagedBean  
@SessionScoped
public class ManterDisciplinaNomeManager {
	@EJB
	DisciplinaNomeDAO disciplinaNomeDAO = new DisciplinaNomeDAO();
    DisciplinaNome disciplinaSelec;
    boolean modoInsert;
    List<DisciplinaNome> disciplinas;
    

    // chamado para popular a tabela nao so na criacao como tambem quando seu coneudo eh mudado
    @PostConstruct
    public void iniciarTabela() {
	    disciplinas = null;
	    disciplinas = (ArrayList<DisciplinaNome>) disciplinaNomeDAO.getBeans();
	    Collections.sort(disciplinas, new Comparadisciplina());
	    setModoInsert(false);
    }

    public DisciplinaNome getdisciplinaSelec() {
        return disciplinaSelec;
    }

    public void setdisciplinaSelec(DisciplinaNome disciplinaSelec) {
        this.disciplinaSelec = disciplinaSelec;
    }

    public boolean getModoInsert() {
        return modoInsert;
    }

    public void setModoInsert(boolean modoInsert) {
        this.modoInsert = modoInsert;
    }

    public List<DisciplinaNome> getdisciplinas() {
        return disciplinas;
    }
    
    public void setdisciplinas(List<DisciplinaNome> disciplinas) {
        this.disciplinas = disciplinas;
    }
    
    public String cadastrar() {
        disciplinaSelec = new DisciplinaNome();
        setModoInsert(true);
        return "manterDisciplinaNomeForm";
    }
    
    public String editar() {
        setModoInsert(false);
        System.out.println("editando" +disciplinaSelec.getNome());
        return "manterDisciplinaNomeForm";
    }
    
    public String remover() {
        DisciplinaNome f = disciplinaNomeDAO.getBean(getdisciplinaSelec().getId());
        disciplinaSelec = null;
        disciplinaNomeDAO.remover(f);
        iniciarTabela();
        return "";
    }
    
    public String salvar() {
        System.out.print("salvando "+disciplinaSelec.getId());
        disciplinaNomeDAO.atualizar(getdisciplinaSelec());
        iniciarTabela();// nova entidade foi inserida; refazer a tabela
        return "manterDisciplinaNomeList";
    }
    
    public String atualizar() {
        System.out.print("atual  "+disciplinaSelec.getId());
        disciplinaNomeDAO.atualizar(getdisciplinaSelec());
        return "manterDisciplinaNomeList";
    }
    
    
    // Classe interna que ordena os disciplinas por nome. ano decrescente, serie crescente
    public class Comparadisciplina implements Comparator<DisciplinaNome> {
        @Override
        public int compare(DisciplinaNome disc1, DisciplinaNome disc2) {
            
                            return (disc1.getNome().compareTo(disc2.getNome()));
                    
        }
    }
    
}
